package com.xiaojiezhu.shiro.base.pool;

import org.apache.commons.pool2.impl.GenericObjectPool;

import java.io.IOException;

/**
 * @Author 朱小杰
 * 时间 2017-08-07 .23:39
 * 说明 ...
 */
public class TestPool {
    public static void main(String[] args) {
        ConnectionPoolFactory connectionPoolFactory = new ConnectionPoolFactory();
        GenericObjectPool pool = new GenericObjectPool(connectionPoolFactory);
        pool.setMaxTotal(5); // 能从池中借出的对象的最大数目
        pool.setMaxIdle(3); // 池中可以空闲对象的最大数目
        pool.setMaxWaitMillis(10000); // 对象池空时调用borrowObject方法，最多等待多少毫秒
        pool.setTimeBetweenEvictionRunsMillis(600000);// 间隔每过多少毫秒进行一次后台对象清理的行动
        pool.setNumTestsPerEvictionRun(-1);// －1表示清理时检查所有线程
        pool.setMinEvictableIdleTimeMillis(3000);// 设定在进行后台对象清理时，休眠时间超过了3000毫秒的对象为过期


        for(int i = 0 ; i < 60 ; i ++){
            new Thread(() -> {
                Connection conn = null;
                try {
                    conn = (Connection) pool.borrowObject();
                    conn.send();
                } catch (Exception e) {
                    e.printStackTrace();
                }finally {
                    if(conn != null){
                        pool.returnObject(conn);
                    }
                }
            }).start();
        }

    }
}
